// pinia根仓库
import { createPinia, defineStore } from 'pinia'
import { globalStoreType } from './interface'
// pinia数据持久化 pnpm add pinia-plugin-persistedstate
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import piniaPersist from '@/config/piniaPersist'
import { logoutApi, userInfoApi } from '@/api/modules/user'

// 初始化pinia实例
const pinia = createPinia()

// 创建pinia仓库
export const GlobalStore = defineStore({
	// id: 仓库的名字【唯一】
	id: 'GlobalStore',
	// state: 定义数据【支持响应式 使用与修改】 [公共数据]
	state: (): globalStoreType => ({
		count: 0,
		nickName: '',
		size: 'large',
		token: ''
	}),
	// getters: 类似于计算属性【有缓存】[公共计算属性]
	getters: {
		// doubleCount: state => state.count * 2,
		// 正常情况下 this指向store实例
		doubleCount() {
			return this.count * 2
		}
	},
	// actions：用于逻辑操作 [公共方法]
	actions: {
		addCount(n: number) {
			this.count += n
		},
		// 获取用户信息
		async getUserinfo() {
			const { data } = await userInfoApi()
			this.nickName = data.nickName
		},
		// 退出登录
		async logout() {
			await logoutApi()
			this.resetData()
		},
		// 重置token与用户名
		resetData() {
			this.token = ''
			this.nickName = ''
		}
	},
	// 设置数据持久化
	persist: piniaPersist('GlobalStore')
})

// 将持久化插件注册到pinia中
pinia.use(piniaPluginPersistedstate)

export default pinia
